/*
 * String.c
 *
 *  Created on: 14/11/2011
 *      Author: marcio
 */

#include "String.h"

String* string_newString(int size, char* c){
	String* str = malloc(sizeof(String));
	int i;
	str->size = size;
	str->elem = malloc(sizeof(char)*size);
	for(i = 0; i < size; i++){
		str->elem[i] = c[i];
	}
	return str;
}

String* string_concat(String* str1, String str2){
	String* str = malloc(sizeof(String));
	int i;
	str->size = str1->size + str2->size;
	str->elem = malloc(sizeof(char)*str->size);
	for(i = 0; i < str1->size; i++){
		str->elem[i] = str1->elem[i];
	}
	for(i = 0; i < str2->size; i++){
		str->elem[i+str1->size] = str2->elem[i];
	}
	return str;
}

String* string_copy(String* str){
	return newString(str->size, string_toCharArray(str));
}

String* string_subString(String* str, int start, int end){
	if(start >= 0 && start <= end && end <= str->size){
		int size = end - start;
		int i;
		char* elem = malloc(sizeof(char)*size);
		for(i = 0; i < size; i++){
			elem[i] = str->elem[start+i];
		}
		return newString(size,elem);
	}
	return NULL;
}

String* string_mix(String* str1, String* str2){
	String* str = malloc(sizeof(String));
	int i;
	int equal = str1->size < str2->size? str1->size : str2->size;
	String* bigger = str1->size < str2->size? str1 : str2;
	str->size = str1->size + str2->size;
	str->elem = malloc(sizeof(char)*str->size);
	for(i = 0 ; i < equal; i++ ){
		str->elem[2*i] = str1->elem[i];
		str->elem[2*i + 1] = str2->elem[i];
	}
	for(i = equal; i < bigger->size; i++){
		str->elem[2*equal + i] = bigger->elem[i];
	}
	return str;
}

String* string_intersection(String* str1, String* str2){
	//TODO
	return NULL;
}

String* string_superString(String* str1, String* str2){
	//TODO
	return NULL;
}

int string_isSubString(String* str1, String* str2){
	//TODO
	return 0;
}

int string_isSuperString(String* str, String* str2){
	//TODO
	return 0;
}

char* string_toCharArray(String* str){
	char* elem = malloc(sizeof(char)*str->size);
	int i;
	for(i = 0; i < str->size; i++){
		elem[i] = str->elem[i];
	}
	return elem;
}
